<?php

class Application_Model_Categorys extends Zend_Db_Table_Abstract
{
    protected $_name = 'categorys';
    protected $_primary = 'catId';
    protected $_rowClass = 'Application_Model_Category';
    protected $_referenceMap = array(
        'SubCategory' => array(
            'columns' => 'catParentId',
            'refColumns'=>'catId',
        )
    );
    protected $_dependentTables = array('eventoCategory', 'propostaCategory');


    /**
     * Restituisce le categorie figlie
     *
     * @param int $parentId
     * @return Zend_Db_Table_Rowset 
     */
    public function getCategoriesByParentId($parentId)
    {
        $select = $this->select()
                       ->where('catParentId = ?', $parentId)
                       ->order('catNome');
        
        return $this->fetchAll($select);
    }
    
    /**
     * Restituisce una categoria in funzione dell'identificativo
     *
     * @param string $ident
     * @return Zend_Db_Table_Row 
     */
    public function getCategoryByIdent($ident)
    {
        $select = $this->select()
                       ->where('catIdent = ?', $ident);
        return $this->fetchRow($select);
    }
    
    /**
     * Restituisce una categoria in funzione dell'id
     *
     * @param int $id
     * @return Zend_Db_Table_Row 
     */
    public function getCategoryById($id)
    {
        return $this->find($id)->current();
    }
    
    /**
     * Conta le righe nella tabella categorys
     * 
     * @return int 
     */
    public function getNumCat()
    {
        $cats = $this->fetchAll();
        return $cats->count();
    }
    
    /**
     * Estrae la colonna degli Id dalla tabella categorys
     * 
     * @return Zend_Db_Table_Rowset
     */
    public function fetchColIds()
    {
        $select = $this->select()
                       ->from('categorys', 'catId');      
        return $this->fetchAll($select); 
    }
    
    // Array albero categorie
    public function getCatArray()
    {
        $data = array();
        $catRoot = $this->getCategoriesByParentId(0);
        foreach ($catRoot as $cr) {
            $dataCat = array();
            $subcats = $this->getCategoriesByParentId($cr->catId);
            foreach ($subcats as $sc) {
                $dataCat[$sc->catId] = $sc->catNome;
            }
            
            $data[$cr->catNome] = $dataCat;
        }
        
        return $data;
    }


    // Array di vavigazione delle categorie
    public function getNavArray() 
    {
        $cats0 = $this->getCategoriesByParentId(0);
        $cats1 = $this->getCategoriesByParentId(1);
        $cats2 = $this->getCategoriesByParentId(2);
        $cats3 = $this->getCategoriesByParentId(3);
        $cats4 = $this->getCategoriesByParentId(4);
        
        // Popolo gli array delle sottocategorie da 1 a 4
        // Array delle categorie che hanno come padre la 1
        $navArray = array();
        foreach ($cats1 as $cat) {
            $navArray[1][] = array(
                'label' => $cat->catNome,
                'uri' => '/proposta/cat/' . $cat->catIdent,
            );
        }
        
        // Array delle categorie che hanno come padre la 2
        foreach ($cats2 as $cat) {
            $navArray[2][] = array(
                'label' => $cat->catNome,
                'uri' => '/proposta/cat/' . $cat->catIdent,
            );
        }
        
        // Array delle categorie che hanno come padre la 3
        foreach ($cats3 as $cat) {
            $navArray[3][] = array(
                'label' => $cat->catNome,
                'uri' => '/proposta/cat/' . $cat->catIdent,
            );
        }
        
        // Array delle categorie che hanno come padre la 4
        foreach ($cats4 as $cat) {
            $navArray[4][] = array(
                'label' => $cat->catNome,
                'uri' => '/proposta/cat/' . $cat->catIdent,
            );
        }
        
        // Array di tutte le categorie, strutturate
        foreach ($cats0 as $cat0) {
            $navArray0[] = array(
                'label' => $cat0->catNome,
                'uri' => '#',
                'pages' => $navArray[$cat0->catId],
            );
        }
        
        $navArrayTot = array(
            array(
                'label' => 'Home',
                'uri' => '/',
            ),
            array(
                'label' => 'Proposte',
                'uri' => '/proposte',
                'pages' => $navArray0,
                ),
            array(
                'label' => 'Archivio',
                'uri' => '/archivio',
            ),
            array(
                'label' => 'Contact',
                'uri' => '/contact',
            ),
        );
        
        return $navArrayTot;
    }
}

